package com.ms.config;

import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.method.HandlerTypePredicate;
import org.springframework.web.servlet.config.annotation.*;

import java.util.Arrays;
import java.util.Objects;

/**
 * 添加自定义拦截器
 */
@Slf4j
@Configuration
@RequiredArgsConstructor
public class WebMvcConfiguration implements WebMvcConfigurer {

    /**
     * 静态资源映射配置（解决文档和静态资源访问）
     */
    @Override
    public void addResourceHandlers(ResourceHandlerRegistry registry) {
        // 1. API 文档资源（直接根路径访问）
        registry.addResourceHandler("/doc.html", "/swagger-ui.html")
                .addResourceLocations("classpath:/META-INF/resources/")
                .setCachePeriod(0);

        // 2. Webjars 资源
        registry.addResourceHandler("/webjars/**")
                .addResourceLocations("classpath:/META-INF/resources/webjars/")
                .setCachePeriod(0);

        // 3. OpenAPI JSON 资源
        registry.addResourceHandler("/v3/api-docs/**")
                .addResourceLocations("classpath:/META-INF/resources/")
                .setCachePeriod(0);
        }


    /**
     * 跨域配置
     */
    @Override
    public void addCorsMappings(CorsRegistry registry) {
        registry.addMapping("/**")           // 针对所有API路径
                .allowedOriginPatterns("*")  // 允许所有来源（生产环境应替换为具体域名）
                .allowedMethods("GET", "POST", "PUT", "DELETE", "OPTIONS") // 允许的HTTP方法
                .allowedHeaders("*")         // 允许所有请求头
                .allowCredentials(true)      // 允许携带凭证（如cookies）
                .maxAge(3600);               // 预检请求缓存时间(秒)
    }

}